import { delay } from 'redux-saga'

export default {
  namespace: 'products',
  /**
   * State 表示 Model 的状态数据，通常表现为一个 javascript 对象（当然它可以是任何值）；
   * 操作的时候每次都要当作不可变数据（immutable data）来对待，
   * 保证每次都是全新对象，没有引用关系，这样才能保证 State 的独立性，便于测试和追踪变化。
   */
  state: [],
  effects: {
    *logAfter1Second(action, { put, call }) {
      console.log('products/logAfter1Second', { action })
      yield call(delay, 1000)
      yield put({ type: 'log', payload: action.payload })
      return '为什么不喝'
    }
  },
  reducers: {
    /**
     * Reducer（也称为 reducing function）函数接受两个参数：
     * 之前已经累积运算的结果和当前要被累积的值，返回的是一个新的累积结果。
     * 该函数把一个集合归并成一个单值。
     * @param {*} state  之前已经累积运算的结果
     * @param {*} param  当前要被累积的值
     * @returns 一个新的累积结果
     */
    'delete'(state, { payload: id }) {
      return state.filter(item => item.id !== id);
    },
    log(state, { payload }) {
      console.log('products/log', { state, payload })
      return { ...state, ...payload }
    }
  },
};